"""
系统配置服务
"""
import asyncio
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.models.config import Config
from app.utils.logger import get_monitor_logger


class ConfigService:
    """系统配置服务"""
    
    def __init__(self):
        self._config_cache = None
        self._cache_lock = asyncio.Lock()
        self.logger = get_monitor_logger()
    async def get_config(self, db: AsyncSession) -> Optional[Config]:
        """
        获取系统配置 - 简化版本，直接使用现有记录
        
        Args:
            db: 数据库会话
            
        Returns:
            Config: 配置对象
        """
        try:
            # 直接使用现有config表的第一条记录
            result = await db.execute(select(Config))
            config = result.first()
            
            if config and config[0]:
                return config[0]
            else:
                # 如果没有记录，返回默认汇率
                return None
                
        except Exception as e:
            self.logger.error(f"获取配置失败: {e}")
            return None
    
    async def update_config(self, db: AsyncSession, **kwargs) -> bool:
        """
        更新系统配置
        
        Args:
            db: 数据库会话
            **kwargs: 要更新的字段
            
        Returns:
            bool: 更新是否成功
        """
        try:
            result = await db.execute(select(Config))
            config = result.scalar_one_or_none()
            
            if not config:
                # 创建新配置
                config = Config(**kwargs)
                db.add(config)
            else:
                # 更新现有配置
                for key, value in kwargs.items():
                    if hasattr(config, key):
                        setattr(config, key, value)
            
            await db.commit()
            
            # 更新缓存
            self._config_cache = config
            
            self.logger.info(f"✅ 更新系统配置: {kwargs}")
            return True
            
        except Exception as e:
            self.logger.error(f"❌ 更新系统配置失败: {e}")
            await db.rollback()
            return False
    
    async def clear_cache(self):
        """清除配置缓存"""
        async with self._cache_lock:
            self._config_cache = None
            self.logger.info("✅ 清除配置缓存")
    
    def format_price_with_rate(self, jpy_price: float, rate: float) -> str:
        """
        格式化价格显示（日元 + 人民币）
        
        Args:
            jpy_price: 日元价格
            rate: 汇率
            
        Returns:
            str: 格式化后的价格字符串
        """
        try:
            # 计算人民币价格
            cny_price = jpy_price * rate
            
            # 格式化显示
            if jpy_price >= 10000:
                jpy_display = f"¥{jpy_price:,.0f}"
                cny_display = f"¥{cny_price:,.0f}"
            else:
                jpy_display = f"¥{jpy_price:.0f}"
                cny_display = f"¥{cny_price:.0f}"
            
            return f"{jpy_display} | {cny_display}"
            
        except (ValueError, TypeError) as e:
            self.logger.error(f"❌ 价格格式化失败: {e}")
            return f"¥{jpy_price}"


# 全局配置服务实例
config_service = ConfigService()